package com.gdust.gkyx.sys.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gdust.gkyx.common.exception.GkyxException;
import com.gdust.gkyx.common.result.ResultCodeEnum;
import com.gdust.gkyx.model.sys.RegionWare;
import com.gdust.gkyx.sys.mapper.RegionWareMapper;
import com.gdust.gkyx.sys.service.RegionWareService;
import com.gdust.gkyx.vo.sys.RegionWareQueryVo;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * ClassName: RegionWareServiceImpl
 * Package: com.gdust.gkyx.sys.service.impl
 * Description:
 *
 * @Author syun
 * @Create 2025/1/24 13:56
 * @Version 1.0
 */
@Service
public class RegionWareServiceImpl extends ServiceImpl<RegionWareMapper, RegionWare> implements RegionWareService {
    /**
     * //分页查询开通区域列表
     * @param pageParam 分页对象
     * @param regionWareQueryVo 分页条件对象
     * @return
     */
    @Override
    public IPage<RegionWare> selectPageRegionWare(Page<RegionWare> pageParam,
                                                  RegionWareQueryVo regionWareQueryVo) {
        //1 获取查询条件值
        String keyword = regionWareQueryVo.getKeyword();

        //2 判断条件值是否为空，不为空封装条件
        LambdaQueryWrapper<RegionWare> wrapper = new LambdaQueryWrapper<>();
        if(!StringUtils.isEmpty(keyword)) {
            //封装条件
            //根据区域名称 或者 仓库名称查询
            wrapper.like(RegionWare::getRegionName,keyword)
                    .or().like(RegionWare::getWareName,keyword);
        }

        //3 调用方法实现条件分页查询
        IPage<RegionWare> regionWarePage = baseMapper.selectPage(pageParam, wrapper);

        //4 数据返回
        return regionWarePage;
    }

    /**
     * //添加开通区域
     * @param regionWare 开通区域对象，包含：开通区域和区域名称
     */
    @Override
    public void saveRegionWare(RegionWare regionWare) {
        //判断区域是否已经开通了
        LambdaQueryWrapper<RegionWare> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(RegionWare::getRegionId,regionWare.getRegionId());
        // 由于 ServiceImpl<RegionWareMapper, RegionWare> 已经指定了 RegionWareMapper 作为类型参数，因此 baseMapper 实际上是 RegionWareMapper 的实例，可以直接用来执行查询操作。
        Integer count = baseMapper.selectCount(wrapper);
        //已经存在(区域已开通情况下)
        if(count > 0) {
            //抛出自定义异常：该区域已开通
            throw new GkyxException(ResultCodeEnum.REGION_OPEN);
        }
        // 由于 ServiceImpl<RegionWareMapper, RegionWare> 已经指定了 RegionWareMapper 作为类型参数，因此 baseMapper 实际上是 RegionWareMapper 的实例，可以直接用来执行查询操作。
        baseMapper.insert(regionWare);
    }

    /**
     * //取消开通区域
     * @param id 区域id
     * @param status 状态（0：未开通 1：已开通）
     */
    @Override
    public void updateStatus(Long id, Integer status) {
        // 由于 ServiceImpl<RegionWareMapper, RegionWare> 已经指定了 RegionWareMapper 作为类型参数，因此 baseMapper 实际上是 RegionWareMapper 的实例，可以直接用来执行查询操作。
        RegionWare regionWare = baseMapper.selectById(id);
        //修改状态值
        regionWare.setStatus(status);
        //调用Mybatis-Plus提供的封装方法，根据id更新
        baseMapper.updateById(regionWare);
    }

}
